// 导入模块
import { _decorator, Component, director } from 'cc';
import { Player } from '../character/Player';
import { World } from '../world/World';
import { UIManager } from '../ui/UIManager';

// 获取装饰器
const { ccclass, property } = _decorator;

/**
 * 游戏主控制器，管理游戏全局状态和流程
 * 负责协调玩家、世界和UI的初始化和交互
 */
@ccclass('GameManager')
export class GameManager extends Component {
    /**
     * 游戏管理器单例实例
     */
    private static _instance: GameManager | null = null;

    /**
     * 玩家控制器引用
     */
    @property(Player)
    public player: Player | null = null;

    /**
     * 世界管理器引用
     */
    @property(World)
    public world: World | null = null;

    /**
     * UI管理器引用
     */
    @property(UIManager)
    public uiManager: UIManager | null = null;

    /**
     * 获取游戏管理器单例
     * @returns 游戏管理器实例
     */
    public static get instance(): GameManager {
        return GameManager._instance!;
    }

    /**
     * 组件加载时调用，初始化单例
     */
    protected onLoad(): void {
        if (GameManager._instance === null) {
            GameManager._instance = this;
            director.addPersistRootNode(this.node);
        } else {
            this.destroy();
        }
    }

    /**
     * 初始化游戏所有子系统
     */
    public initGame(): void {
        this.world?.init();
        this.player?.init();
        this.uiManager?.init();
    }

    /**
     * 重置游戏所有子系统状态
     */
    public resetGame(): void {
        this.world?.reset();
        this.player?.reset();
        this.uiManager?.reset();
    }

    /**
     * 更新游戏状态
     * @param dt 帧间隔时间(秒)
     */
    public update(dt: number): void {
        // 游戏状态更新逻辑
    }
}
